package com.vxb.testmvp.test_retrofit.entity;

import com.google.gson.annotations.SerializedName;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class LoginBase extends BasicBase {
    @SerializedName("data")
    public LoginData loginData;

    public LoginBase() {
    }

    public LoginData getLoginData() {
        return loginData;
    }

    public void setLoginData(LoginData loginData) {
        this.loginData = loginData;
    }


    public static class LoginData {
        @SerializedName("token")
        public String token;

        @SerializedName("user_mobile")
        public String userMobile;

        @SerializedName("user_head")
        public String userHead;

        @SerializedName("user_name")
        public String userName;

        /**
         * 0: 保密, 1:男 , 2: 女
         */
        @SerializedName("user_sex")
        public String userSex;

        @SerializedName("user_email")
        public String userEmail;

        @SerializedName("department")
        public String department;

        @SerializedName("duty")
        public String duty;

        @SerializedName("orgName")
        public String orgName;

        /**
         * null: 无审批权限, 其他: 有审批权限
         */
        @SerializedName("permit")
        public String permit;

        @SerializedName("notifications")
        public List<Notification> notificationList = new ArrayList<>();

        @SerializedName("subordinates")
        public List<Subordinate> subordinateList = new ArrayList<>();

        @SerializedName("structs")
        public List<Struct> structList = new ArrayList<>();

        @SerializedName("monthRankInfo")
        public MonthRankInfo monthRankInfo;

        @SerializedName("yearRankInfo")
        public YearRankInfo yearRankInfo;

        @SerializedName("options")
        public List<Option> optionList = new ArrayList<>();

        @SerializedName("permits")
        public List<Permit> permits = new ArrayList<>();

        @SerializedName("duelTypeVos")
        public List<DuelTypeVo> duelTypeVos = new ArrayList();

        public String getUserHead() {
            return userHead;
        }

        public void setUserHead(String userHead) {
            this.userHead = userHead;
        }

        public List<DuelTypeVo> getDuelTypeVos() {
            return duelTypeVos;
        }

        public void setDuelTypeVos(List<DuelTypeVo> duelTypeVos) {
            this.duelTypeVos = duelTypeVos;
        }

        public String getToken() {
            return token;
        }

        public void setToken(String token) {
            this.token = token;
        }

        public List<Permit> getPermits() {
            return permits;
        }

        public void setPermits(List<Permit> permits) {
            this.permits = permits;
        }

        public MonthRankInfo getMonthRankInfo() {
            return monthRankInfo;
        }

        public void setMonthRankInfo(MonthRankInfo monthRankInfo) {
            this.monthRankInfo = monthRankInfo;
        }

        public YearRankInfo getYearRankInfo() {
            return yearRankInfo;
        }

        public void setYearRankInfo(YearRankInfo yearRankInfo) {
            this.yearRankInfo = yearRankInfo;
        }

        public List<Option> getOptionList() {
            return optionList;
        }

        public void setOptionList(List<Option> optionList) {
            this.optionList = optionList;
        }

        public String getUserMobile() {
            return userMobile;
        }

        public void setUserMobile(String userMobile) {
            this.userMobile = userMobile;
        }

        public String getUserName() {
            return userName;
        }

        public void setUserName(String userName) {
            this.userName = userName;
        }

        public String getUserSex() {
            return userSex;
        }

        public void setUserSex(String userSex) {
            this.userSex = userSex;
        }

        public String getUserEmail() {
            return userEmail;
        }

        public void setUserEmail(String userEmail) {
            this.userEmail = userEmail;
        }

        public String getDepartment() {
            return department;
        }

        public void setDepartment(String department) {
            this.department = department;
        }

        public String getDuty() {
            return duty;
        }

        public void setDuty(String duty) {
            this.duty = duty;
        }

        public String getOrgName() {
            return orgName;
        }

        public void setOrgName(String orgName) {
            this.orgName = orgName;
        }

        public String getPermit() {
            return permit;
        }

        public void setPermit(String permit) {
            this.permit = permit;
        }

        public List<Notification> getNotificationList() {
            return notificationList;
        }

        public void setNotificationList(List<Notification> notificationList) {
            this.notificationList = notificationList;
        }

        public List<Subordinate> getSubordinateList() {
            return subordinateList;
        }

        public void setSubordinateList(List<Subordinate> subordinateList) {
            this.subordinateList = subordinateList;
        }

        public List<Struct> getStructList() {
            return structList;
        }

        public void setStructList(List<Struct> structList) {
            this.structList = structList;
        }
    }

    public class DuelTypeVo {
        @SerializedName("duelTypeId")
        public String duelTypeId;

        @SerializedName("duelTypeName")
        public String duelTypeName;

        public String getDuelTypeId() {
            return duelTypeId;
        }

        public void setDuelTypeId(String duelTypeId) {
            this.duelTypeId = duelTypeId;
        }

        public String getDuelTypeName() {
            return duelTypeName;
        }

        public void setDuelTypeName(String duelTypeName) {
            this.duelTypeName = duelTypeName;
        }
    }

    public class Permit {
        /*
        * "permitId":"1","permitName":"审批权限"
        * */
        @SerializedName("permitId")
        public String permitId;

        @SerializedName("permitName")
        public String permitName;

        public String getPermitId() {
            return permitId;
        }

        public void setPermitId(String permitId) {
            this.permitId = permitId;
        }

        public String getPermitName() {
            return permitName;
        }

        public void setPermitName(String permitName) {
            this.permitName = permitName;
        }
    }


    public class MonthRankInfo {
        @SerializedName("score")
        public String score;
        @SerializedName("rank")
        public String rank;

        public String getScore() {
            return score;
        }

        public void setScore(String score) {
            this.score = score;
        }

        public String getRank() {
            return rank;
        }

        public void setRank(String rank) {
            this.rank = rank;
        }
    }


    public class YearRankInfo {
        @SerializedName("score")
        public String score;
        @SerializedName("rank")
        public String rank;

        public String getScore() {
            return score;
        }

        public void setScore(String score) {
            this.score = score;
        }

        public String getRank() {
            return rank;
        }

        public void setRank(String rank) {
            this.rank = rank;
        }
    }


    public class Option {
        @SerializedName("option_id")
        public String optionId;

        @SerializedName("option_name")
        public String optionName;

        @SerializedName("children")
        public List<Child> childList = new ArrayList<>();

        public String getOptionId() {
            return optionId;
        }

        public void setOptionId(String optionId) {
            this.optionId = optionId;
        }

        public String getOptionName() {
            return optionName;
        }

        public void setOptionName(String optionName) {
            this.optionName = optionName;
        }

        public List<Child> getChildList() {
            return childList;
        }

        public void setChildList(List<Child> childList) {
            this.childList = childList;
        }


        public class Child implements Serializable{
            @SerializedName("option_id")
            public String optionId;

            @SerializedName("option_name")
            public String optionName;

            @SerializedName("option_type")
            public String optionType;

            @SerializedName("option_score")
            public String optionScore;

            public String getOptionId() {
                return optionId;
            }

            public void setOptionId(String optionId) {
                this.optionId = optionId;
            }

            public String getOptionName() {
                return optionName;
            }

            public void setOptionName(String optionName) {
                this.optionName = optionName;
            }

            public String getOptionType() {
                return optionType;
            }

            public void setOptionType(String optionType) {
                this.optionType = optionType;
            }

            public String getOptionScore() {
                return optionScore;
            }

            public void setOptionScore(String optionScore) {
                this.optionScore = optionScore;
            }
        }
    }


    public static class Notification extends StringPair {
        @SerializedName("notifierId")
        public String notifierId;

        @SerializedName("notifierName")
        public String notifierName;

        public String getNotifierId() {
            return notifierId;
        }

        public void setNotifierId(String notifierId) {
            this.notifierId = notifierId;
        }

        public String getNotifierName() {
            return notifierName;
        }

        public void setNotifierName(String notifierName) {
            this.notifierName = notifierName;
        }

        @Override
        public String getId() {
            return notifierId;
        }

        @Override
        public void setId(String id) {
            notifierId = id;
        }

        @Override
        public String getName() {
            return notifierName;
        }

        @Override
        public void setName(String name) {
            notifierName = name;
        }
    }


    public class Struct extends StringPair {
        @SerializedName("structId")
        public String structId;
        @SerializedName("structName")
        public String structName;

        public String getStructId() {
            return structId;
        }

        public void setStructId(String structId) {
            this.structId = structId;
        }

        public String getStructName() {
            return structName;
        }

        public void setStructName(String structName) {
            this.structName = structName;
        }


        @Override
        public String getId() {
            return structId;
        }

        @Override
        public void setId(String id) {
            structId = id;
        }

        @Override
        public String getName() {
            return structName;
        }

        @Override
        public void setName(String name) {
            structName = name;
        }
    }

    public class Subordinate extends StringPair {
        @SerializedName("subordinatesId")
        public String subordinatesId;

        @SerializedName("subordinatesName")
        public String subordinatesName;

        public String getSubordinatesId() {
            return subordinatesId;
        }

        public void setSubordinatesId(String subordinatesId) {
            this.subordinatesId = subordinatesId;
        }

        public String getSubordinatesName() {
            return subordinatesName;
        }

        public void setSubordinatesName(String subordinatesName) {
            this.subordinatesName = subordinatesName;
        }

        @Override
        public String getId() {
            return subordinatesId;
        }

        @Override
        public void setId(String id) {
            subordinatesId = id;
        }

        @Override
        public String getName() {
            return subordinatesName;
        }

        @Override
        public void setName(String name) {
            subordinatesName = name;
        }
    }


    public static abstract class StringPair {
        public abstract String getId();

        public abstract void setId(String id);

        public abstract String getName();

        public abstract void setName(String name);
    }
}